An image includes color information that is displayed on a two-dimensional array of pixels. The pixels are divided into tiles of the image. Color and/or texture information related to the pixels within a tile are stored in a block of memory. The image can be encoded (compressed) to reduce its size so that the image can be efficiently stored in memory. The stored information is then accessed, where it can be decoded (decompressed), reconstructed, and displayed.
An image's true color is typically rendered as 32 bits per pixel, wherein eight bits are assigned to each of the red, green, blue, and alpha (transparency) components. However, the cost of storing true color information for each of the pixels in an image is prohibitively high. In part, to keep the cost and required space reasonable, the memory included in image rendering systems is designed to store a finite amount of information that is smaller than the amount associated with the true information related to one or more images.
Additionally, the bandwidth required for rendering images is of concern. Transferring true color information (e.g., 32 bits for each pixel) for pixels in an image would require large amounts of bandwidth between the memory and the image renderer. For real-time images and videos, this bandwidth requirement is impossible to meet without increasing circuit layouts thereby increasing the size and cost of the image renderer.
One solution to the limited memory and bandwidth requirements is to compress and/or encode the true color information for an image, and to store the compressed data within memory. Thereafter, the compressed data is decoded (decompressed), reconstructed, and displayed. Proper implementation of compression and decompression methods is desired for lossless storage and display of images.